#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
自动打包脚本
将GIF背景去除工具打包成独立的exe文件
"""

import os
import sys
import subprocess
import shutil

def install_pyinstaller():
    """安装PyInstaller"""
    print("检查PyInstaller安装状态...")
    try:
        # 检查是否已安装
        result = subprocess.run(['pip389', 'show', 'pyinstaller'],
                              capture_output=True, text=True)
        if result.returncode == 0:
            print("PyInstaller已安装")
            return True
    except:
        pass

    print("正在安装PyInstaller...")
    try:
        subprocess.run(['pip389', 'install', 'pyinstaller'], check=True)
        print("PyInstaller安装成功!")
        return True
    except subprocess.CalledProcessError:
        print("安装PyInstaller失败!")
        return False

def clean_build():
    """清理构建文件"""
    print("清理旧构建文件...")
    for directory in ['dist', 'build', '__pycache__']:
        if os.path.exists(directory):
            shutil.rmtree(directory)
            print(f"已删除 {directory}")

    # 删除spec文件
    if os.path.exists('bg.spec'):
        os.remove('bg.spec')
        print("已删除 bg.spec")

def build_no_console():
    """无控制台打包"""
    print("\n开始单文件打包（无控制台）...")
    clean_build()

    cmd = [
        'pyinstaller',
        '--onefile',
        '--windowed',
        '--noupx',
        '--hidden-import=PIL',
        '--hidden-import=numpy',
        '--hidden-import=tkinter',
        '--hidden-import=scipy',
        '--hidden-import=scipy.ndimage',
        '--clean',
        'bg.py'
    ]

    try:
        subprocess.run(cmd, check=True)
        if os.path.exists('dist/bg.exe'):
            size = os.path.getsize('dist/bg.exe')
            print(f"\n✅ 打包成功!")
            print(f"📁 文件位置: dist/bg.exe")
            print(f"📏 文件大小: {size/1024/1024:.1f} MB")
            print("🚀 可以直接运行 dist/bg.exe")
            return True
    except subprocess.CalledProcessError:
        print("❌ 打包失败!")
        return False

def build_with_console():
    """带控制台打包"""
    print("\n开始单文件打包（带控制台）...")
    clean_build()

    cmd = [
        'pyinstaller',
        '--onefile',
        '--noupx',
        '--hidden-import=PIL',
        '--hidden-import=numpy',
        '--hidden-import=tkinter',
        '--hidden-import=scipy',
        '--hidden-import=scipy.ndimage',
        '--clean',
        'bg.py'
    ]

    try:
        subprocess.run(cmd, check=True)
        if os.path.exists('dist/bg.exe'):
            size = os.path.getsize('dist/bg.exe')
            print(f"\n✅ 打包成功!")
            print(f"📁 文件位置: dist/bg.exe")
            print(f"📏 文件大小: {size/1024/1024:.1f} MB")
            print("🚀 可以直接运行 dist/bg.exe")
            return True
    except subprocess.CalledProcessError:
        print("❌ 打包失败!")
        return False

def main():
    print("=================================")
    print("     GIF背景去除工具 打包程序")
    print("=================================")

    # 安装PyInstaller
    if not install_pyinstaller():
        input("按回车键退出...")
        return

    while True:
        print("\n选择打包方式：")
        print("1. 单文件打包（无控制台）- 推荐")
        print("2. 单文件打包（带控制台）")
        print("3. 退出")

        choice = input("\n请选择 (1/2/3): ").strip()

        if choice == '1':
            build_no_console()
            break
        elif choice == '2':
            build_with_console()
            break
        elif choice == '3':
            print("退出程序")
            break
        else:
            print("无效选择，请重新输入!")

    input("\n按回车键退出...")

if __name__ == "__main__":
    main()